// motion_interface_msg.hpp
#pragma once
#include <cstdint>
// 跨平台内存对齐控制
#if defined(_MSC_VER)
    #define PACKED_STRUCT(name) __pragma(pack(push, 1)) struct name
    #define END_PACKED __pragma(pack(pop))
#else
    #define PACKED_STRUCT(name) struct __attribute__((packed)) name
    #define END_PACKED
#endif

namespace motion_interface {

// 定义紧凑型二进制数据结构
PACKED_STRUCT(rig_pos_t) {
    float pos_X;    // X轴位置（单位：米）
    float pos_Y;    // Y轴位置
    float pos_Z;    // Z轴高度
    float eul_X;    // X轴欧拉角（弧度）
    float eul_Y;    // Y轴欧拉角
    float eul_Z;    // Z轴航向角
} END_PACKED;

PACKED_STRUCT(rig_pos_pack_t) {
    uint32_t seq_pack;  // 数据包序列号
    uint32_t sec;
    uint32_t nsec;     // 时间戳（秒和纳秒）
    rig_pos_t rig_pos;  // 实际位姿数据
} END_PACKED;

PACKED_STRUCT(rig_vel_t){
    float vel_X;    // X轴速度（单位：米/秒）
    float vel_Y;    // Y轴速度
    float vel_Z;    // Z轴高度速度
    float angvel_X; // X轴角速度（弧度/秒）
    float angvel_Y; // Y轴角速度
    float angvel_Z; // Z轴角速度
} END_PACKED;

PACKED_STRUCT(rig_vel_pack_t) {
    uint32_t seq_pack;  // 数据包序列号
    rig_vel_t rig_vel;  // 实际速度数据
} END_PACKED;

#undef PACKED_STRUCT
#undef END_PACKED

} // namespace motion_interface